// 上篇文章聊了高楼扔鸡蛋问题，讲了一种效率不是很高，但是较为容易理解的动态规划解法。后台很多读者问如何更高效地解决这个问题，今天就谈两种思路，来优化一下这个问题，分别是二分查找优化和重新定义状态转移。
// 如果还不知道高楼扔鸡蛋问题的读者可以看下「经典动态规划：高楼扔鸡蛋」，那篇文章详解了题目的含义和基本的动态规划解题思路，请确保理解前文，因为今天的优化都是基于这个基本解法的。
// 二分搜索的优化思路也许是我们可以尽力尝试写出的，而修改状态转移的解法可能是不容易想到的，可以借此见识一下动态规划算法设计的玄妙，当做思维拓展。
// 二分搜索优化
// 之前提到过这个解法，核心是因为状态转移方程的单调性，这里可以具体展开看看。
// 首先简述一下原始动态规划的思路：
// 1、暴力穷举尝试在所有楼层 1 <= i <= N 扔鸡蛋，每次选择尝试次数最少的那一层；
// 2、每次扔鸡蛋有两种可能，要么碎，要么没碎；
// 3、如果鸡蛋碎了，F 应该在第 i 层下面，否则，F 应该在第 i 层上面；
// 4、鸡蛋是碎了还是没碎，取决于哪种情况下尝试次数更多，因为我们想求的是最坏情况下的结果。
// 核心的状态转移代码是这段：
// # 当前状态为 K 个鸡蛋，面对 N 层楼
// # 返回这个状态下的最优结果
// def dp(K, N):
//     for 1 <= i <= N:
//         # 最坏情况下的最少扔鸡蛋次数
//         res = min(res, 
//                   max( 
//                         dp(K - 1, i - 1), # 碎
//                         dp(K, N - i)      # 没碎
//                      ) + 1 # 在第 i 楼扔了一次
//                  )
//     return res